/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.persistencia;

import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Instructor;
import co.edu.senaclem.modelo.LideresFicha;
import static co.edu.senaclem.persistencia.Persistencia.areadb;
import static co.edu.senaclem.persistencia.Persistencia.con;
import static co.edu.senaclem.persistencia.Persistencia.conectar;
import static co.edu.senaclem.persistencia.Persistencia.desconectar;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;

/**
 *
 * @author DILOVE
 */
@Stateless
public class LideresDAO implements ILideresDAO {

    IFichaTitulacionDAO fichaTitulacionDAO = new FichaTitulacionDAO();
    IInstructorDAO instructorDAO = new InstructorDAO();

    public static ResultSet resSet = null;
    
    @Override
    public void registrar(LideresFicha lideresFicha) throws Exception {
        try {
            if (conectar()) {
                String consulta = "insert into lideresficha values(null,"+lideresFicha.getDocumentoinstructor().getDocumento().getDocumento()+"," + lideresFicha.getFichaTitulacion().getFicha() + ",'" + lideresFicha.getFechaasignacion() + "')";
                System.out.println("consulta "+consulta);
                areadb = con.createStatement();
                areadb.execute(consulta);
                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void eliminar(LideresFicha lideresFicha) throws Exception {
        try {
            if (conectar()) {
                String consulta = "delete from lideresficha where documentoinstructor=" + lideresFicha.getDocumentoinstructor().getDocumento().getDocumento() + " and fichatitulacion = "+lideresFicha.getFichaTitulacion().getFicha()+"";
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<LideresFicha> consultarPorInstructor(Integer documentoInstructor) throws Exception {
        try {
            List<LideresFicha> lideres = new ArrayList<LideresFicha>();
            LideresFicha lideresFicha = null;
            if (conectar()) {
                String consulta = "Select * From lideresficha where documentoinstructor=" + documentoInstructor + "";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                while (resSet.next()) {
                    lideresFicha = new LideresFicha();
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaL = fichaTitulacionDAO.consultarPorId(ficha);
                    lideresFicha.setFichaTitulacion(fichaL);
                    Instructor instructorL = instructorDAO.consultarPorId(resSet.getLong("documentoinstructor"));
                    lideresFicha.setDocumentoinstructor(instructorL);
                    lideresFicha.setFechaasignacion(resSet.getString("fechaasignacion"));
                    lideres.add(lideresFicha);
                }
                resSet.close();
                desconectar();
            }

            return lideres;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public LideresFicha consultarPorFicha(Integer fichatitulacion) throws Exception {
        try {
            LideresFicha lideresFicha = null;
            if (conectar()) {
                String consulta = "Select * From lideresficha where fichatitulacion="+fichatitulacion+" and fechaasignacion IN(select max(fechaasignacion) from lideresficha);";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                if (resSet.next()) {
                    lideresFicha = new LideresFicha();
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaL = fichaTitulacionDAO.consultarPorId(ficha);
                    lideresFicha.setFichaTitulacion(fichaL);
                    Instructor instructorL = instructorDAO.consultarPorId(resSet.getLong("documentoinstructor"));
                    lideresFicha.setDocumentoinstructor(instructorL);
                    lideresFicha.setFechaasignacion(resSet.getString("fechaasignacion"));
                }
                resSet.close();
                desconectar();
            }

            return lideresFicha;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<LideresFicha> consultar() throws Exception {
        try {
            LideresFicha lideresFicha = null;
            List<LideresFicha> lideres = new ArrayList<LideresFicha>();
            if (conectar()) {
                String consulta = "Select * From lideresficha";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                while (resSet.next()) {
                    lideresFicha = new LideresFicha();
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaL = fichaTitulacionDAO.consultarPorId(ficha);
                    lideresFicha.setNumerolider(resSet.getInt("numerolider"));
                    lideresFicha.setFichaTitulacion(fichaL);
                    Instructor instructorL = instructorDAO.consultarPorId(resSet.getLong("documentoinstructor"));
                    lideresFicha.setDocumentoinstructor(instructorL);
                    lideresFicha.setFechaasignacion(resSet.getString("fechaasignacion"));
                    
                    lideres.add(lideresFicha);
                }

                resSet.close();
                desconectar();
            }

            return lideres;
        } catch (RuntimeException e) {
            throw e;
        }
    }

}
